package chemtools_logica.LN.SFBean;

import chemtools_logica.BDL.IR.BDL_SFEventoxproductoRemote;
import chemtools_logica.BDL.IR.BDL_SFProductoRemote;

import chemtools_logica.Beans.EventoxinsumoBean;

import chemtools_logica.Beans.EventoxproductoBean;
import chemtools_logica.Beans.ProductoBean;

import chemtools_logica.Entidades.Almacen;
import chemtools_logica.Entidades.Contenedores;
import chemtools_logica.Entidades.Empresa;
import chemtools_logica.Entidades.Evento;
import chemtools_logica.Entidades.Eventoxproducto;
import chemtools_logica.Entidades.Graficoestado;
import chemtools_logica.Entidades.Medida;
import chemtools_logica.Entidades.Producto;

import chemtools_logica.Entidades.Tipoproducto;

import chemtools_logica.Entidades.Usuario;

import chemtools_logica.LN.IL.LN_SFProductoLocal;
import chemtools_logica.LN.IR.LN_SFProductoRemote;

import chemtools_logica.util_formato.Fecha.FechaUtiles;

import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.annotation.Resource;


@Stateless(name = "LN_SFProducto", mappedName = "map-LN_SFProducto")
public class LN_SFProductoBean implements LN_SFProductoRemote, LN_SFProductoLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;

    @EJB
    private BDL_SFProductoRemote bDL_SFProductoRemote;
    @EJB
    private BDL_SFEventoxproductoRemote BDL_SF_EventoxproductoRemote;
    
            public List<ProductoBean> getProductosbyAlmacen(int nidAlmacen){
                List<ProductoBean> productos = new ArrayList<ProductoBean>();
                
                List<Eventoxproducto> ev = BDL_SF_EventoxproductoRemote.getProductosporAlmacenActivo(nidAlmacen);
                
                List<ProductoBean> productosBean = new ArrayList<ProductoBean>();
                
                for(Eventoxproducto entidad : ev){
                    ProductoBean beanProducto = new ProductoBean();
                    
                    beanProducto = convertEntityTobean(entidad.getProducto());
                    
                    productosBean.add(beanProducto);
                }
                
                return productosBean;
            }
    
        public List<ProductoBean> getAllProducto(){
            List<Producto> productoEntidad = bDL_SFProductoRemote.getProductoFindAll();
            List<ProductoBean> productoBean = convertListEntityToBean(productoEntidad);
            
            return productoBean;
        }
        
        
        public List<ProductoBean> busquedaProducto(ProductoBean tProducto){
            List<ProductoBean> listaBean = new ArrayList<ProductoBean>();
            List<Producto> listaEntidad = BDL_SF_EventoxproductoRemote.busquedaProducto(tProducto);
            listaBean = convertListEntityToBean(listaEntidad);
           
            return listaBean;
        }
           
           
        public List<ProductoBean> getProductosActivos(){
            List<Producto> productoEntidad = bDL_SFProductoRemote.getAllProductosActivos();                  
            List<ProductoBean> productoBean = new ArrayList<ProductoBean>();
            productoBean = convertListEntityToBean(productoEntidad);
                
            return productoBean;  
        }
        
        public void updateProducto(EventoxproductoBean eventoxproducto){
                Eventoxproducto eProducto = new Eventoxproducto();
                
                eProducto = this.convertBeanToEntityEventoxproducto(eventoxproducto);
                
                bDL_SFProductoRemote.mergeProducto(eProducto.getProducto());
                
                BDL_SF_EventoxproductoRemote.mergeEventoxproducto(eProducto);
        }
        
        public void insertarProducto(EventoxproductoBean eventoxproducto){
                Eventoxproducto eProducto = new Eventoxproducto();
                
                eProducto = this.convertBeanToEntityEventoxproducto(eventoxproducto);
                
                BDL_SF_EventoxproductoRemote.mergeEventoxproducto(eProducto);
        }
        
        public boolean verificarCodigoDupl(String codigo){
                boolean exi = bDL_SFProductoRemote.existeCodigoProducto(codigo);
                return exi;
        }
        
        public BigDecimal getContenidoEventoProducto(String idProducto){
            BigDecimal contenido = BDL_SF_EventoxproductoRemote.getContenidoProductoEvento(idProducto);
            return contenido;
        }
        
        public void cambioPRoductoAlmacen(List<EventoxproductoBean>listaBean){
            List<EventoxproductoBean>listaEntidad = new ArrayList<EventoxproductoBean>();
            
            for(EventoxproductoBean bean : listaBean){
                Eventoxproducto entidad = new Eventoxproducto();
                
                entidad = convertBeanToEntityEventoxproducto(bean);
                
                BDL_SF_EventoxproductoRemote.mergeEventoxproducto(entidad);
            }  
        }
    
    public List<Graficoestado> getChartGraficoProductoEstado(String idAlmacen, Date fechaMin, Date fechaMax){
        List<Graficoestado> listaGrafico = bDL_SFProductoRemote.CallProceduregraficoProductoEstado(idAlmacen, fechaMin, fechaMax);
        
        return listaGrafico;
    }
        
        public Eventoxproducto convertBeanToEntityEventoxproducto(EventoxproductoBean eventoxproducto){
            Eventoxproducto eProducto = new Eventoxproducto();
            Producto productoEntidad = new Producto();
            Evento evento = new Evento();
            Usuario user = new Usuario();
            Almacen almacen = new Almacen();
            
            productoEntidad = convertBeanToEntity(eventoxproducto.getProducto());

            eProducto.setProducto(productoEntidad);
            
                evento.setIdEvento(eventoxproducto.getIdEvento());
                eProducto.setEvento(evento);
            
            eProducto.setFecha_Evento(eventoxproducto.getFecha_Evento());
                
                user.setIdUsuario(eventoxproducto.getIdUsuario());
                eProducto.setUsuario(user);
                eProducto.setContenido(eventoxproducto.getContenido());
            
                almacen.setIdAlmacen(eventoxproducto.getIdAlmacen());
                eProducto.setAlmacen(almacen);
                
            return eProducto;
        }
        
        public Producto convertBeanToEntity(ProductoBean beanProducto){
            Producto entidadProducto = new Producto();
            Tipoproducto tipoProducto = new Tipoproducto();
            Contenedores contenedor = new Contenedores();
            Medida medida = new Medida();
            Empresa empresa = new Empresa();
            
            entidadProducto.setCalidad(beanProducto.getCalidad());
            entidadProducto.setComentario(beanProducto.getComentario());
            entidadProducto.setEstado(beanProducto.getEstado());
            entidadProducto.setContenido(beanProducto.getContenido());
            
            Date fechaCreacion = FechaUtiles.fechaActual();
            
            entidadProducto.setFecha_Creacion(fechaCreacion);
            entidadProducto.setIdProducto(beanProducto.getIdProducto());
            entidadProducto.setTiempo_Caducacion(beanProducto.getTiempo_Caducacion());
            entidadProducto.setImagen(beanProducto.getImagen());
            
            tipoProducto.setIdTipoProducto(beanProducto.getIdtipoProducto());
                
            entidadProducto.setTipoproducto(tipoProducto);
            
            empresa.setIdEmpresa(beanProducto.getIdEmpresa());
            entidadProducto.setEmpresa(empresa);

            return entidadProducto;
        }
        
            public List<ProductoBean> convertListEntityToBean(List<Producto> productoEntidad){
                List<ProductoBean> productoBean= new ArrayList<ProductoBean>();
                
                for(Producto entidad: productoEntidad){
                    ProductoBean beanProducto=new ProductoBean();

                    beanProducto = convertEntityTobean(entidad);
                    
                    productoBean.add(beanProducto);
                }
                
                return productoBean;
            }

            public ProductoBean convertEntityTobean(Producto producto){
                ProductoBean beanProducto=new ProductoBean();

                beanProducto.setIdProducto(producto.getIdProducto());
                beanProducto.setEstado(producto.getEstado());
                beanProducto.setCalidad(producto.getCalidad());
                beanProducto.setComentario(producto.getComentario());
                beanProducto.setFecha_Creacion(producto.getFecha_Creacion());
                beanProducto.setImagen(producto.getImagen());
                beanProducto.setTiempo_Caducacion(producto.getTiempo_Caducacion());
                beanProducto.setContenido(producto.getContenido());
                
                beanProducto.setNombreEmpresa(producto.getEmpresa().getRazonSocial());
                beanProducto.setIdEmpresa(producto.getEmpresa().getIdEmpresa());
                
                beanProducto.setIdtipoProducto(producto.getTipoproducto().getIdTipoProducto());
                beanProducto.setDescripciontipoProducto(producto.getTipoproducto().getDescripcion());
                
                beanProducto.setIdMedida(producto.getTipoproducto().getMedida().getIdMedida());            
                beanProducto.setDescripcionMedida(producto.getTipoproducto().getMedida().getDescripcion());
                
                beanProducto.setIdContenedores(producto.getTipoproducto().getContenedores().getIdContenedores());
                beanProducto.setDescripcionContenedores(producto.getTipoproducto().getContenedores().getDescripcion());
                
                if(producto.getEstado() == 0){
                    beanProducto.setStyleEstado("background-color:#EAB7B7;color:#675a5a;");
                }else{
                    beanProducto.setStyleEstado("background-color:#C9E5F6;color:#675a5a;");
                }
                
                return beanProducto;
            }
}

